package com.tedu.thread;

import org.junit.Test;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
import java.io.File;
import java.io.FileFilter;
import java.util.*;

/**
 * Lambda表达式()->{}【接口/抽象类--名内部类】
 * 【集合遍历--匿名内部类】
 * collection--->List:存重复元素并且有序【保存数据结构一般】
 * set:存无序并且不重复【保存数据结构一致】
 * queue:队列结合业务
 * Map--------->HashMap:键值对储存
 *
 */
public class Lambdaclass<string, Biconsumer> {
    @Test
    public void testList(){
        //List集合:保存元素
        List<string> list=new ArrayList<>();
        list.add((string) "白洋淀");
        list.add((string) "正定古城");
        list.add((string) "河头老街");
        list.add((string) "自石山");
        //集合3种遍历方式:普通for、增强for、forEach方法
        for (string str:list){System.out.println("增强for:"+str);
        }
         //支持forEach方法:遍历集合元素
         // Consumer接口针对List、set、Queue集合提供接口:功能获取list集合元素
         // accept()获取list集合的所有元素list.forEach(new Consumer<string>(){public void accept(string s){
        String  s= null;
        System.out.println("consumer接日遍历方案:"+s);
         //支持forEach方法:遍历集合元素【Consumer 名内部类】
         // 编写Lambda表达式写法
        list.forEach(s->System.out.println("Lambda遍历方案:"+s));
    }
    @Test
    public void testMap(){
        //创建Map
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"唐山");
        map.put(2,"石家庄");
        map.put(3,"秦皇岛");
        map.put(4,"邯郸");
        //遍历结合:普通for、增强for、forEach(BiconSummer接口--匿名内部类)
        //键值对-->Entry对象
        //BiConSummer接口---获取每组Entry对象accept()获取Entry对象
        map.forEach(new Biconsumer<Integer,string>(){
            public void accept(Integer integer, string s);
                System.out.println("键"+integer+"值:"+s);
        })
    ;}

    /**
     *
     *
     *作业:    1.使用Lambda表达式完成 Thread线程创建
     * 2.使用Lambda表达式完成 Runnable线程创建
     * 3.I0流--File类:listFile(FileFilter接日)【5行代码)
     * 目标:【io包下FilterAPI类】实现使用Lambda表达式完成
     * 4.I0流--File类:listFile(FileFilter接)【2行代码)
     * 目标:【io包下FilterAPI类】实现使用Lambda表达式完成
     * 5.集台:改成lambda写法
     * 目标:【list包下ListAPI类下单元测试:testComparator()】
     */
@Test
public void LambdaHomeWork1() {
    //使用Lambda表达式完成Thread线程创建
    //使用Lambda表达式完成Thread线程创建
    //Thread类内嵌Runnable类f--线程run运行
    Thread t1 = new Thread(() -> {
        for (int i = 0; i < 1000; i++) {
            System.out.println("1");
        }
    });
    t1.start();
}
@Test
public void LambdaHomeWork2(){
    //1.创建Runnable接口 --run()
    Runnable mr1=()->{for(int i=0;i<1000;i++){
        System.out.println("2");}};
    //2.创建Thread线程类--start()
    Thread t2=new Thread(mr1);
    //3.启动线程
    t2.start();
    }
    @Test
    public void LambdaHomeWork3(){
        File ai=new File("."+File.separator);
        FileFilter ib=(File pathname)-> {return pathname.getName().startsWith("3");};
        File[] o=ai.listFiles(ib);
        for (int i = 0; i < ; i++) {

        }
        System.out.println(o[ib].getName());
    }

    @Test
    public void LambdaHomeWork4(){
        for(File f:new File("."+File.separator).listFiles((pathname)->{return pathname.getName().startswith("s");})){
            System.out.println(f);
        }
    }
@Test
    public void LambdaHomeWork5(){
    List<String> m=new ArrayList<>();
    m.add("1");
    m.add("2");
    m.add("3");
    m.add("4");
    Comparator<String> io=
            (o1, o2) -> return o1.length()-o2.length();};
    Collection.sort(m,io);
    System.out.println(m);
}











